package com.lost.octopus.es.helper.annotation;

import com.lost.octopus.es.helper.constant.EsFieldMappingType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * es查询字段排序
 * @author zhangbh
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface EsSort {

    /**
     * 排序用的名称，支持内嵌字段如 name.keyword
     * @return 字段名
     */
    String name();

    /**
     * 排序方式
     * @return 排序方式 {@link SortOrder}
     */
    SortOrder orderBy() default SortOrder.ASC;

    /**
     * 是否加入排序 如 name，则检查name=(String)1，则加入此排序
     * @return 检查是否加入排序的字段名
     */
    String sortOn() default "";

    /**
     * 标识排序类型，部分特殊字段需要指定
     * @return 字段映射类型
     */
    EsFieldMappingType unmappedType() default EsFieldMappingType.type_keyword;

    /**
     * 排序优先级，越低越前
     * @return 排序优先级
     */
    int order() default Integer.MAX_VALUE;

    public enum SortOrder {
        /**
         * 排序方式
         */
        ASC,
        DESC,
    }
}
